package fr.generali.accueilclient.gwt.client.common;

/**
 * Encapsulates an action for later execution, often from a different context. 
 * <p>
 * The TypedCommand interface provides a layer of separation between the code
 * specifying some behavior and the code invoking that behavior. This separation
 * aids in creating reusable code. For example, a
 * {@link com.google.gwt.user.client.ui.MenuItem} can have a TypedCommand associated
 * with it that it executes when the menu item is chosen by the user.
 * Importantly, the code that constructed the TypedCommand to be executed when the
 * menu item is invoked knows nothing about the internals of the MenuItem class
 * and vice-versa.
 * </p>
 * 
 * <p>
 * The TypedCommand interface is often implemented with an anonymous inner class. For
 * example,
 * 
 * <pre>
 * TypedCommand sayHello = new TypedCommand() {
 *   public void execute() {
 *     Window.alert("Hello");
 *   }
 * };
 * sayHello.execute();
 * </pre>
 * 
 * </p>
 * This type extends ScheduledCommand to help migrate from DeferredCommand API.
 */
public interface TypedCommand<T> {
	/**
	 * Causes the TypedCommand to perform its encapsulated behavior.
	 */
	void execute(T t);
}
